package com.vtuzx.kingdee.xqc_api.service;

import com.vtuzx.core.VtuzxException;
import com.vtuzx.core.bean.dto.VtuzxMap;
import com.vtuzx.core.bean.dto.VtuzxToken;
import com.vtuzx.web.bean.VtuzxDownloadBean;
import org.bson.types.ObjectId;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 采购服务
 */
public interface IXqcOtherOutService {


    /**
     * 创建其他出库单
     *
     * @param _userId 用户ID
     */
    VtuzxMap saveUserOtherOut(ObjectId _userId, String name, Map<String, Object> param) throws VtuzxException;


    /**
     * 审核其他出库单
     *
     */
    void auditOtherOutOrder(ObjectId _userId, String userName, String stockNo, String billNo) throws VtuzxException;

    /**
     * 添加用户生产领料箱号+数量
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param boxNo 箱号
     * @param count 数量(只在包材时使用)
     * @return 添加后物料信息
     */
    VtuzxMap addUserOtherOutMaterialBox(ObjectId _userId, String name, String stockNo, String boxNo, int count) throws VtuzxException;

    /**
     * 添加用户生产领料箱号+数量
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param boxList 箱号列表
     * @return 添加后物料信息
     */
    Object addUserOtherOutMaterialBoxList(ObjectId _userId, String name, String stockNo, List<Map<String, Object>> boxList, String billNo) throws VtuzxException;
    /**
     * 删除用户生产领料单分录
     *
     * @param _userId 用户ID
     * @return 删除后物料信息
     */
    VtuzxMap deleteUserOtherOutMaterialBox(ObjectId _userId, String id);

    /**
     * 删除用户生产领料单分录
     *
     * @param _userId 用户ID
     */
    void deleteUserOtherOutMaterial(ObjectId _userId, String id);

    /**
     * 删除用户生产领料单分录箱的重量
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     */
    void deleteUserOtherOut(ObjectId _userId, String stockNo);

    /**
     * 更新用户生产领料单分录箱的重量
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param materialNo 物料编码
     * @param boxNo 物料编码
     * @param count 数量
     * @return 更新后物料信息
     */
    VtuzxMap updateUserOtherOutMaterialBox(ObjectId _userId, String stockNo, String materialNo, String boxNo, double count);

    /**
     * 获取用户未保存生产领料单分录列表
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @return 用户未保存采购入库单分录的箱号列表
     */
    VtuzxMap getUserOtherOutMaterial(ObjectId _userId, String stockNo, String billNo);

    /**
     * 获取用户未保存生产领料单分录的箱号列表
     *
     * @param _userId 用户ID
     * @return 用户未保存采购入库单分录的箱号列表
     */
    VtuzxMap getUserOtherOutMaterialBox(ObjectId _userId, String _detailId);

    /**
     * 获取创建者生产领料单列表
     *
     * @param _userId 用户ID
     * @param param 仓库编码
     * @return 采购入库单列表
     */
    VtuzxMap getOtherOutBill(ObjectId _userId, Map<String, Object> param, int pageIndex, int pageSize);

    /**
     * 获取创建者生产领料单分录
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param billNo 采购入库单号
     * @return 采购入库单分录
     */
    VtuzxMap getOtherOutBillDetail(ObjectId _userId, String stockNo, String billNo);

    /**
     * 获取创建者生产领料单分录的箱号列表
     *
     * @param _userId 用户ID
     * @return 采购入库单分录的箱号列表
     */
    VtuzxMap getOtherOutBillDetailBox(ObjectId _userId, String _detailId);

    /**
     * 获取其它出库申请单
     *
     * @param _userId 用户ID
     * @param param 仓库编码
     * @return 采购入库单列表
     */
    VtuzxMap getOtherOutBillApply(ObjectId _userId, Map<String, Object> param, int pageIndex, int pageSize);

    /**
     * 获取其他出库申请单详细
     * @param _userId 用户ID
     * @param billNo 采购入库单号
     * @return 采购入库单分录
     */
    VtuzxMap getOtherOutBillApplyDetail(ObjectId _userId,  String billNo);

    /**
     * 保存其他出库申请单
     * @param _userId 用户ID
     */
    VtuzxMap saveOtherOutApply(ObjectId _userId, String name, Map<String, Object> param) throws VtuzxException;

    VtuzxMap getOtherOutBillPDA(ObjectId userId, Map<String, Object> param);

    /**
     * 修改其他出库打印状态
     * @param userId
     * @param name
     * @param param
     * @return
     */
    VtuzxMap updateOtherOutSeal(Serializable userId, String name, Map<String, Object> param);

    /**
     * 下载其他出库详情
     * @param token
     * @param param
     * @return
     */
    VtuzxDownloadBean downloadOtherOutDetail(VtuzxToken token, Map<String, Object> param) throws Exception;
}
